package co.edu.uniquindio.dao;

import java.util.List;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.Query;

import co.edu.uniquindio.logica.Automovil;
import co.edu.uniquindio.logica.Marca;
import co.edu.uniquindio.logica.Modelo;
import co.edu.uniquindio.logica.Vendedor;

/**
 * Dao implementation class for Dao: VendedorDao
 * esta Dao me permite hacer todo el manejo con la BD
 * de la informacion concernientes a un vendedor
 * @author Andres  Felipe Abril
 * @author Luis Enrique Robledo
 */
@Stateless 
@LocalBean
public class VendedorDao extends Dao<Vendedor, String> {

	/**
	 * contructor por defecto de la clase VendedorDao 
	 */
	public VendedorDao() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * Metodo para obtener la entidad de vendedor
	 * @return Entity de vendedor
	 */
	@Override
	protected Class<Vendedor> getEntityClass() {
		// TODO Auto-generated method stub
		return Vendedor.class;
	}

	/**
	 * este metodo obtiene una lista de automoviles asociados a un vendedor 
	 * @return una lista con los automoviles asociados al vendedor
	 */
	@SuppressWarnings("unchecked")
	public List<Automovil> automovilesPVendedor(Vendedor vendedor)
	{
		Query query = entityManager.createQuery("select automovil.numeroPlaca from Vendedor vendedor,IN(vendedor.automoviles) automovil where vendedor= :vendedor" );
		//  Query query = entityManager.createQuery("select automovil.numeroPlaca from Vendedor vendedor INNER JOIN vendedor.automoviles automovil");
		query.setParameter("vendedor", vendedor);
		return query.getResultList();

	}
	/**
	 * este metodo me permite obtener el nombre de el color asociado a la lista de automoviles del vendedor
	 * @return una lista con el nombre de el vendedr y el nombre de el color
	 */
	@SuppressWarnings("unchecked")
	public List<Automovil> p()
	{
		//TODO:revizar
		Query query = entityManager.createQuery("select vendedor.nombre, automovil.color.nombre from	Vendedor vendedor LEFT JOIN vendedor.automoviles automovil" );
		return query.getResultList();
	}
	/**
	 * este metodo me permite obtener una lista de vendedores asociados a un nombre
	 * @param el nombre 
	 * @return una lista de vendedores con el mismo nombre
	 * 
	 */
	@SuppressWarnings("unchecked")
	public List<Vendedor> buscarVporNombre(String nombre)
	{
		Query query = entityManager.createQuery("select vendedor from Vendedor vendedor where vendedor.nombre LIKE :nombre " );
		query.setParameter("nombre", nombre );
		return query.getResultList();

	}
	@SuppressWarnings("unchecked")
	public List<Automovil> automovilesVendedor(Vendedor vendedor)
	{
		Query query = entityManager.createQuery("select automovil from Vendedor vendedor INNER JOIN  vendedor.automoviles automovil where vendedor= :vendedor " );
		query.setParameter("vendedor", vendedor);
		return query.getResultList();
	}
}
